#define MAX_COMPOSE_LEN 20
typedef struct {
- gunichar *sequence;
- gunichar value[2];
- char *comment;
+ gunichar *sequence;
+ char *value;
+ char *comment;
} GtkComposeData;
gtk_compose_data_free (GtkComposeData *compose_data)
{
g_free (compose_data->sequence);
+ g_free (compose_data->value);
g_free (compose_data->comment);
g_slice_free (GtkComposeData, compose_data);
}
char **words = g_strsplit (val, "\"", 3);
gunichar uch;
char *endp;
+ char buf[8] = { 0, };
if (g_strv_length (words) < 3)
{
}
}
- compose_data->value[1] = uch;
+ g_unichar_to_utf8 (uch, buf);
+ compose_data->value = g_strdup (buf);
if (uch == '"')
compose_data->comment = g_strdup (g_strstrip (words[2] + 1));
int n_compose = 0;
gboolean compose_finish;
gunichar output_char;
+ char buf[8] = { 0, };
compose_data = list->data;
&output_char) &&
compose_finish)
{
- if (compose_data->value[1] == output_char)
+ g_unichar_to_utf8 (output_char, buf);
+ if (strcmp (compose_data->value, buf) == 0)
removed_list = g_list_prepend (removed_list, compose_data);
}
else if (gtk_check_algorithmically (keysyms, n_compose, &output_char))
{
- if (compose_data->value[1] == output_char)
+ g_unichar_to_utf8 (output_char, buf);
+ if (strcmp (compose_data->value, buf) == 0)
removed_list = g_list_prepend (removed_list, compose_data);
}
}
if (p_n_index_stride)
*p_n_index_stride = max_compose_len + 2;
- for (list = compose_list; list != NULL; list = list->next)
- {
- compose_data = list->data;
- codepoint = compose_data->value[1];
- if (codepoint > 0xffff)
- {
- compose_data->value[0] = codepoint / 0x10000;
- compose_data->value[1] = codepoint - codepoint / 0x10000 * 0x10000;
- }
- }
-
return compose_list;
}
GList *list;
GtkComposeData *compose_data;
GtkComposeTable *retval = NULL;
+ gunichar codepoint;
g_return_val_if_fail (compose_list != NULL, NULL);
}
gtk_compose_seqs[n++] = (guint16) compose_data->sequence[i];
}
- gtk_compose_seqs[n++] = (guint16) compose_data->value[0];
- gtk_compose_seqs[n++] = (guint16) compose_data->value[1];
+
+ codepoint = g_utf8_get_char (compose_data->value);
+ if (codepoint > 0xffff)
+ {
+ gtk_compose_seqs[n++] = codepoint / 0x10000;
+ gtk_compose_seqs[n++] = codepoint - codepoint / 0x10000 * 0x10000;
+ }
+ else
+ {
+ gtk_compose_seqs[n++] = 0;
+ gtk_compose_seqs[n++] = codepoint;
+ }
}
retval = g_new0 (GtkComposeTable, 1);